package TestDemo;

/**
 * 如果类a继承类b，实现接口c，而类b和接口c中定义了同名变量，请问会出现什么问题？
 * 答案：错误。在编译时会发生错误(错误描述不同的JVM有不同的信息，
 * 意思就是未明确的x调用，两个x都匹配（就象在同时import java.util和java.sql两个包时直接声明Date一样）。
 * 对于父类的变量,可以用super.x来明确(输出的是1)，而接口的属性默认隐含为 public static final.
 * 所以可以通过AA.x来明确(输出的是0)。
 */

interface AA
{
    int x = 12;
    public void DDTest();
}

interface DD
{
    public void DDTest();
}

class BB
{
    int x =1;
}

class InterfaceDemo extends BB implements AA,DD
{
    public void pX()

    {
        System.out.println(AA.x);
        System.out.println(super.x);
        //System.out.println(x);//不能确定调用哪个变量，对于父类的变量,可以用super.x来明确
    }

    @Override
    public void DDTest(){

    }
    public static void main(String[] args) {
        new InterfaceDemo().pX();
    }
}

class Test {
    int y = 1;

    //成员内部类
    class innerClass{
        int u = y;
        innerClass(){
            System.out.println(u);
        }
    }

    public static void hello() {
        final int t= 33;
        //局部内部类
        class functionClass{
            int u = t;//访问外部类变量，需要是final标识
            functionClass(){
                System.out.println(u);
            }
        }
        System.out.println("hello");
    }
}
 class MyApplication {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test test= new Test();
        (new Test()).new innerClass();//通过这样来访问内部类
        test.hello();
    }
}
